#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SVG转PNG图标生成器
码农飞哥（VX: 2809641033）

这个脚本将SVG图标转换为PNG格式
需要安装: pip install cairosvg pillow
"""

import os
import sys
from pathlib import Path

try:
    import cairosvg
    from PIL import Image
    import io
except ImportError as e:
    print(f"❌ 缺少必要的库: {e}")
    print("请运行: pip install cairosvg pillow")
    sys.exit(1)

def svg_to_png(svg_path, png_path, size=None):
    """
    将SVG文件转换为PNG格式
    
    Args:
        svg_path (str): SVG文件路径
        png_path (str): 输出PNG文件路径
        size (tuple): 可选的尺寸 (width, height)
    """
    try:
        # 读取SVG文件
        with open(svg_path, 'r', encoding='utf-8') as f:
            svg_content = f.read()
        
        # 如果指定了尺寸，则使用指定尺寸
        if size:
            width, height = size
            png_data = cairosvg.svg2png(
                bytestring=svg_content.encode('utf-8'),
                output_width=width,
                output_height=height
            )
        else:
            # 使用SVG原始尺寸
            png_data = cairosvg.svg2png(bytestring=svg_content.encode('utf-8'))
        
        # 保存PNG文件
        with open(png_path, 'wb') as f:
            f.write(png_data)
        
        return True
    except Exception as e:
        print(f"❌ 转换失败 {svg_path}: {e}")
        return False

def extract_size_from_filename(filename):
    """
    从文件名中提取尺寸信息
    例如: icon16.svg -> 16
    """
    import re
    match = re.search(r'(\d+)', filename)
    return int(match.group(1)) if match else 128

def main():
    """
    主函数：批量转换SVG图标为PNG
    """
    print("🎨 SVG转PNG图标生成器")
    print("码农飞哥（VX: 2809641033）")
    print("-" * 50)
    
    # 获取当前脚本所在目录
    script_dir = Path(__file__).parent
    icons_dir = script_dir / "icons"
    
    # 检查icons目录是否存在
    if not icons_dir.exists():
        print(f"❌ 找不到icons目录: {icons_dir}")
        return
    
    # 查找所有SVG文件
    svg_files = list(icons_dir.glob("*.svg"))
    
    if not svg_files:
        print(f"❌ 在 {icons_dir} 中没有找到SVG文件")
        return
    
    print(f"📁 找到 {len(svg_files)} 个SVG文件")
    
    success_count = 0
    
    for svg_file in svg_files:
        print(f"\n🔄 正在转换: {svg_file.name}")
        
        # 生成PNG文件名
        png_filename = svg_file.stem + ".png"
        png_path = icons_dir / png_filename
        
        # 从文件名提取尺寸
        size = extract_size_from_filename(svg_file.name)
        
        # 转换SVG到PNG
        if svg_to_png(str(svg_file), str(png_path), (size, size)):
            print(f"✅ 成功生成: {png_filename} ({size}x{size})")
            success_count += 1
        else:
            print(f"❌ 转换失败: {svg_file.name}")
    
    print(f"\n🎉 转换完成！")
    print(f"✅ 成功: {success_count}/{len(svg_files)} 个文件")
    
    if success_count > 0:
        print(f"\n📂 PNG文件已保存到: {icons_dir}")
        print("\n生成的文件:")
        for png_file in icons_dir.glob("*.png"):
            file_size = png_file.stat().st_size
            print(f"  - {png_file.name} ({file_size} bytes)")

if __name__ == "__main__":
    main()